package consumer_manager

import (
	// "database/sql"
	"fmt"

	"gitee.com/Sxiaobai/gs/gsnsq"
)

// // Logger 日志接口
// type Logger interface {
// 	Debugf(format string, args ...interface{})
// 	Infof(format string, args ...interface{})
// 	Errorf(format string, args ...interface{})
// }

// // Database 数据库接口
// type Database interface {
// 	Exec(query string, args ...interface{}) (sql.Result, error)
// 	QueryRow(query string, args ...interface{}) *sql.Row
// 	Query(query string, args ...interface{}) (*sql.Rows, error)
// }

// NSQConsumerInterface NSQ消费者接口
type NSQConsumerInterface interface {
	GetCurrentConsumerCount() int
	AdjustConsumerCount(targetCount int, callFunc func(string, uint16) bool) error
	ForceStopAllConsumers() error // 强制停止所有消费者，用于优雅关闭
	StopProducer() error          // 停止生产者
}

// NSQAdapter NSQ适配器，用于适配现有的gsnsq.NsqStruct
type NSQAdapter struct {
	NsqStruct *gsnsq.NsqStruct
}

// GetCurrentConsumerCount 获取当前消费者数量
func (adapter *NSQAdapter) GetCurrentConsumerCount() int {
	return len(adapter.NsqStruct.ConsumerList)
}

// AdjustConsumerCount 调整消费者数量
// 注意：这个方法会重新创建所有消费者，因为gsnsq.NsqStruct不支持动态增减
func (adapter *NSQAdapter) AdjustConsumerCount(targetCount int, callFunc func(string, uint16) bool) error {
	if targetCount <= 0 {
		return fmt.Errorf("target count must be greater than 0")
	}

	// 停止现有消费者
	for _, consumer := range adapter.NsqStruct.ConsumerList {
		consumer.Stop()
	}

	// 清空消费者列表
	adapter.NsqStruct.ConsumerList = adapter.NsqStruct.ConsumerList[:0]

	// 创建新的消费者
	return adapter.NsqStruct.CreateConsumer(targetCount, callFunc)
}

// ForceStopAllConsumers 强制停止所有消费者，用于优雅关闭
// 此方法绕过数量限制，专门用于服务停止时的清理工作
func (adapter *NSQAdapter) ForceStopAllConsumers() error {
	// 停止所有现有消费者
	for _, consumer := range adapter.NsqStruct.ConsumerList {
		consumer.Stop()
	}
	// 清空消费者列表
	adapter.NsqStruct.ConsumerList = adapter.NsqStruct.ConsumerList[:0]
	return nil
}

// StopProducer 强制停止所有生产者，用于服务停止时的清理工作
func (adapter *NSQAdapter) StopProducer() error {
	// 停止所有现有生产者
	adapter.NsqStruct.ProducerStop()
	return nil
}
